<?
class Aldeao extends Personagem implements Comandavel {
	
	function __construct ($nome, $raca, $sexo) {
		parent::__construct ($nome, $raca, $sexo);
		$this->data['classe_nome']				= 'aldeão';
		$this->data['classe_nome_art']			= 'um';
		
		$this->data['classe_min_hp']			= 0;
		$this->data['classe_min_mana'] 			= 0;
		$this->data['classe_min_estamina'] 		= 0;
		$this->data['classe_min_moral'] 		= 0;
		$this->data['classe_min_forca'] 		= 0;
		$this->data['classe_min_pontaria'] 		= 0;
		$this->data['classe_min_evasao'] 		= 0;
		$this->data['classe_min_inteligencia'] 	= 0;
		$this->data['classe_min_estamina'] 		= 0;
		$this->data['classe_min_carisma'] 		= 0;
	}
		
	public function prepararCombate($areaActual, $alvoNome, $manager, $html) {
		if ($actorAlvo = $areaActual->getActorByName($alvoNome, $manager)) {
			if ($this->getCombateId() != null && ($this->getCombateId() == $actorAlvo->getCombateId())) {
				if ($combate = $manager->readObj($this->getCombateId(), 'combates')) {
					if ($combate->existeActor($actorAlvo)) {
						$html->set('com_result', $html->get('combate_iniciado'));
					} else $html->set('com_result', $html->get('atacar_actor_erro'));
				} else $html->set('com_result', $html->get('combate_erro'));
			} else {
				if ($actorAlvo->getCombateId() == null) {
					$combate = new Combate($this, $actorAlvo);
					if ($manager->writeObj($combate, 'id', 'combates')) {
						$html->set('com_result', $html->get('combate_iniciado'));
					} else $html->set('com_result', $html->get('start_combate_erro'));
				} else $html->set('com_result', $html->get('atacar_actor_erro'));
			}
		} else $html->set('com_result', $html->get('atacar_actor_erro'));
	}
	
	public function acidArrow($actorAlvo, $manager, $html) {
		if ($actorAlvo) {
			echo "1";
			// ATTACK ROLL
			$dado = new Dado(20);
			$attack_roll = $dado->lancar(1, 0);
			if ($attack_roll > 1) {
				echo "2";
				$flechaAcida = new FeiticoAcidArrow();
				if ($flechaAcida->activar($actorAlvo, $attack_roll)) {
					$html->set('com_result', $html->get('spell_ok'));
					$html->set('com_result', $html->mixArray($actorAlvo->toArray(), 'com_result'));
				} else $html->set('com_result', $html->get('spell_erro'));
			} else $html->set('com_result', $html->get('spell_erro'));
		} else $html->set('com_result', $html->get('spell_erro'));
	}
	
	public function ingerirObj($objAlvo, $manager, $html) {
		$obj = $this->inv_objs->devolvePorAtrib('nome', $objAlvo);
		if ($obj) {
			if ($this->ingerir($this, $obj)) {
				if ($this->largar($obj)) {
					$html->set('com_result', $html->get('beber_obj_ok'));
				} else $html->set('com_result', $html->get('beber_obj_erro'));
			} else $html->set('com_result', $html->get('beber_obj_erro'));
		} else $html->set('com_result', $html->get('beber_obj_erro'));
	}
	
	public function largarObj($conta, $areaActual, $objAlvo, $manager, $html) {
		$obj = $this->inv_objs->devolvePorAtrib('nome', $objAlvo);
		if (!$obj) $obj = $this->equip_objs->devolvePorAtrib('nome', $objAlvo);
		if ($obj) {
			if ($this->largar($obj)) {
				if ($areaActual->adicionaObj($obj)) {
					$html->set('com_result', $html->get('largar_obj_ok'));
					$manager->writeObj($areaActual, 'nome', 'areas');
				} else $html->set('com_result', $html->get('largar_obj_erro'));
			} else $html->set('com_result', $html->get('largar_obj_erro'));
		} else $html->set('com_result', $html->get('largar_obj_erro'));
	}
	
	public function apanharObj($conta, $areaActual, $objAlvo, $manager, $html) {
		if ($obj = $areaActual->getObjByAtrib('nome', $objAlvo)) {
			if ($this->apanhar($obj)) {
				if ($areaActual->removeObj($obj)) {
					$html->set('com_result', $html->get('apanhar_obj_ok'));
					$manager->writeObj($areaActual, 'nome', 'areas');
				} else $html->set('com_result', $html->get('apanhar_obj_erro'));
			} else $html->set('com_result', $html->get('apanhar_obj_erro'));
		} else $html->set('com_result', $html->get('apanhar_obj_erro'));
	}
	
	public function desequiparObj($conta, $objAlvo, $manager, $html) {
		if ($obj = $this->equip_objs->devolvePorAtrib('nome', $objAlvo)) {
			if ($this->partesDoCorpoLivres($obj)) {
				$html->set('com_result', $html->get('desequipar_obj_ok'));
			} else $html->set('com_result', $html->get('desequipar_obj_erro'));
		} else $html->set('com_result', $html->get('desequipar_obj_erro'));
	}
	
	public function equiparObj($conta, $objAlvo, $manager, $html) {
		if ($obj = $this->inv_objs->devolvePorAtrib('nome', $objAlvo)) {
			if ($this->equipar($obj)) {
				$html->set('com_result', $html->get('equipar_obj_ok'));
			} else $html->set('com_result', $html->get('equipar_obj_erro'));
		} else $html->set('com_result', $html->get('equipar_obj_erro'));
	}
	
	public function listarAtributos($html) {
		$html->set('com_result', $this->examinadoHtml($html, 99));
	}
	
	public function venderObj($areaActual, $alvoNome, $contentorNome, $manager, $html) {
		if ($contentorNome != '') {
			//echo '1';
			if ($contentorAlvo = $areaActual->getObjByAtrib('nome', $contentorNome)) {
				//echo '2';
				if ($objAlvo = $contentorAlvo->getObjByAtrib('nome', $alvoNome)) {
					//echo '3';
					if ($objAlvo->getValue('ouro') != null) {
						//echo '4';
						if ($contentorAlvo->adquirir($objAlvo, 1)) {
							//echo '5';
							if ($this->largar($objAlvo)) {
								$this->data['ouro'] += $objAlvo->getValue('ouro');
								$manager->writeObj($areaActual, 'nome', 'areas');
								$html->set('com_result', $html->get('vender_ok'));
							} else $html->set('com_result', $html->get('vender_erro'));
						} else $html->set('com_result', $html->get('vender_erro'));
					} else $html->set('com_result', $html->get('vender_erro'));
				} else $html->set('com_result', $html->get('vender_erro'));
			} else $html->set('com_result', $html->get('vender_erro'));
		} else $html->set('com_result', $html->get('vender_erro'));
	}
	
	public function comprarObj($areaActual, $alvoNome, $contentorNome, $manager, $html) {
		if ($contentorNome != '') {
			if ($contentorAlvo = $areaActual->getObjByAtrib('nome', $contentorNome)) {
				if ($objAlvo = $contentorAlvo->getNewObjByAtrib('nome', $alvoNome)) {
					if ($objAlvo->getValue('ouro') != null) {
						if ($this->getValue('ouro') >= $objAlvo->getValue('ouro')) {
							$this->apanhar($objAlvo);
							$this->data['ouro'] -= $objAlvo->getValue('ouro');
							$manager->writeObj($areaActual, 'nome', 'areas');
							$html->set('com_result', $html->get('comprar_ok'));
						} else $html->set('com_result', $html->get('comprar_erro'));
					} else $html->set('com_result', $html->get('comprar_erro'));
				} else $html->set('com_result', $html->get('comprar_erro'));
			} else $html->set('com_result', $html->get('comprar_erro'));
		} else $html->set('com_result', $html->get('comprar_erro'));
	}	
	
	public function examinar($areaActual, $alvoNome, $contentorNome, $manager, $html) {
		if ($contentorNome != '') {
			if ($contentorAlvo = $areaActual->getObjByAtrib('nome', $contentorNome)) {
				if ($objAlvo = $contentorAlvo->getObjByAtrib('nome', $alvoNome)) {
					$html->set('com_result', $objAlvo->examinadoHtml($html));
				} else $html->set('com_result', $html->get('examinar_erro'));
			} else $html->set('com_result', $html->get('examinar_erro'));
		} else {
			if ($actorAlvo = $areaActual->getActorByName($alvoNome, $manager)) {
				$html->set('com_result', $actorAlvo->examinadoHtml($html, $this->getValue('nivel')));
			} elseif ($objAlvo = $areaActual->getObjByAtrib('nome', $alvoNome)) {
				$html->set('com_result', $objAlvo->examinadoHtml($html));
			} else $html->set('com_result', $html->get('examinar_erro'));
		}
	}	

	public function mover($mapa, $areaActual, $dir, $manager, $html) {
		if ($this->getValue("nonLethalDamage") + 1 <= $this->getValue("hp")) {
			$area_dir_coord = $mapa->getCoords($areaActual->getCoords(), $dir);
			if ($areaDest = $mapa->getArea($area_dir_coord, $manager)) {
				if ($areaActual->removeActor($this)) {
					if ($areaDest->adicionaActor($this)) {
						if ($this->getValue("nonLethalDamage") + 1 <= $this->getValue("hp_max")) {
                            $this->setValue("nonLethalDamage", $this->getValue("nonLethalDamage")+1);
                        } else {
                            $this->setValue("nonLethalDamage", $this->getValue("hp_max"));
                        }
						$manager->writeObj($areaActual, 'nome', 'areas');
						$manager->writeObj($areaDest, 'nome', 'areas');
					} else $html->set('com_result', $html->get('mover_erro'));
				} else $html->set('com_result', $html->get('mover_erro'));
			} else $html->set('com_result', $html->get('mover_erro'));
		} $html->set('com_result', $html->get('mover_erro'));
	}
	public function toArray() {
		return $this->data;
	}
}
?>